Computer application programs, such as those comprised of computer-executable instructions executed on a computing device, traditionally provide some form of information output, either in the form of information presented to a user through a user interface, information stored or presented on some form of logging or recording medium, or a combination thereof. In many cases, the computer executable instructions of a computer application program may be performing many tasks simultaneously. Informational output from, or associated with, every one of these simultaneously performed tasks may overwhelm a user or a logging or recording medium. For example, if a user were to receive information from a computer application program informing the user of every task that that computer application program was performing, the amount of information presented to the user would be greater than could be meaningfully understood by the user. As a result, the user would likely ignore much, if not all, of the information presented by the computer application program. Similarly, depending on the logging or recording medium, and on the environment within which such a logging or recording medium is being utilized, too much outputted information could exhaust the recording medium, such as in an environment in which the recording medium can be difficult or impractical to replace or replenish.
Conversely, over-filtering the informational output of an application program can be likewise detrimental in that the user may perceive that the application program is idling when, in fact, the application program is performing one or more tasks, or the log or other record created from the informational output of such an application program can comprise insufficient information to be utilized as intended. Consequently, the selection of which information to output from application program may need to be carefully undertaken.
In many cases computer application programs are divided into components or discrete functionality, such that the functional state of an application program at any time can be expressed as a combination of functional states associated with the components or functionality of the application program. As a simple example, a syncing application program can perform the discrete functions of examining files, transmitting files, and receiving files. At any point in time, such an application program can be performing any one or more of these discrete functions and its functional state can be expressed in terms of which one or more of these discrete functions are currently performing. For such an application program, the above-described output selection problem translates into a problem of which, if any, state is to be output, such as to a user or to a recording or logging medium.